AWS Glue ジョブのブックマーク機能の基準と留意点を教えてください
困っていること
AWS Glue のジョブブックマーク機能を利用して変更されたデータの差分を再処理し、ジョブの実行時間短縮、コスト削減を行いたいと考えています。
AWS Glue のジョブブックマークはどこを基準にして前回のジョブ実行以降に変更されたデータを再処理する必要があるかどうかを判断していますか、教えてください。また、留意点(考慮事項)などもあれば教えてください。
※参考情報 (P58)
どう対応すればいいの?
AWS Glue ジョブのブックマーク機能は、以下 2 つの入力ソースより異なります。
- リレーショナルデータベース(JDBC 接続データソース)
- S3 バケット
リレーショナルデータベース(JDBC 接続データソース)
ジョブのブックマークが有効の場合、ジョブが正常に実行されるたびにブックマークの状態が更新され、処理したデータを追跡します。同じデータソースで実行する後続のジョブは、最後のチェックポイント以降に新しく追加されたデータのみ を処理します。
ジョブ ブックマークをサポートするソースがジョブにある場合、ジョブは処理されたデータを追跡し、ジョブが実行されると、最後のチェックポイント以降の新しいデータを処理します。
留意点
AuroraDB を含むリレーショナルデータベースなどの JDBC 接続を介した入力ソースに対してもジョブのブックマーク機能を提供していますが、ブックマーク機能が正しく動作するためには、データベースのテーブルにプライマリキーが設定されていることが必要です。
以下ドキュメント記載の通り、プライマリキーがランダムに並んでいる場合、ジョブのブックマークは正しく機能しません。また更新された行に対しては、ジョブのブックマークは機能しません。
JDBC 接続を介した入力ソースについては、ジョブが処理するデータのプライマリキーが連続している場合にのみ ジョブのブックマークは "新しい行に対して" 機能します。
入力ソースのリレーショナルデータベース (JDBC 接続) を使用している場合は、テーブルのプライマリキーが順番になっている場合のみジョブのブックマークが機能します。ジョブのブックマークは新しい行に対して機能しますが、更新された行に対しては機能しません。これは、ジョブのブックマークで探すプライマリキーがすでに存在しているからです。これは、入力ソースが Amazon Simple Storage Service (Amazon S3) である場合には適用されません。
S3 バケット
S3 バケットからのデータを入力ソースとして使用する場合、ジョブのブックマークは S3 オブジェクトの最終更新日時を確認し、前回のジョブ実行以降に変更されたオブジェクトを再処理する必要があるかどうかを判断します。
Amazon S3 入力ソースの場合、AWS Glue ジョブのブックマークではオブジェクトの最終更新日時を確認して、どのオブジェクトを再処理する必要があるのかを確認します。入力ソースデータが最後のジョブ実行以降に変更されている場合、ジョブを再度実行すると、ファイルが再度処理されます。
※参考情報 (P57)
同じジョブを使用してすべてのデータを再処理する必要がある場合
AWS Glue ジョブのブックマークをリセットすることで、過去のジョブ実行のコミットに戻ることが可能です。
これにより、過去の時間から入力データを再処理する必要がある場合や、ETL パイプラインの AWS Glue ワークフローで調整した ETL スクリプトやダウンストリームジョブで別の変換セットを使用したい場合に役立ちます。
なお、ジョブブックマークの状態をリセットするには 3 つの方法で使用可能です。
- AWS Glue コンソール
- ResetJobBookmark Action (Python: reset_job_bookmark) API オペレーション
- AWS CLI
以下 Amazon Web Services ブログ、弊社ブログを参考に詳細や設定、挙動についてをご確認ください。